package oa.base.service;

import java.util.Collection;
import java.util.List;
import java.util.Map;

import oa.base.hibernate.BaseClass;
import oa.base.util.Page;


public interface BaseService<T extends BaseClass> {
	/**
	 * 创建
	 * @param role
	 * @return
	 */
	public Long create(T t);
	
	public int createAll(Collection<T> list);
	/**
	 * 修改
	 * @param role
	 * @return
	 */
	public void update(T t);
	
	public void updateSelect(T t);
	
	public void updateAll(Collection<T> list);
	
	public void saveAll(Collection<T> list);
	/**
	 * 修改
	 * @param role
	 * @return
	 */
	public void delete(T t);
	
	/**
	 * 
	 * @param 删除
	 * @return
	 */
	public void delete(Long id);
	
	/**
	 * 
	 * @param 删除
	 * @return
	 */
	public void delete(Map<String,Object> maps);

	/**
	 * 
	 * @param 删除
	 * @return
	 */
	public void deleteById(List<Long> ids);
	
	public void deleteAll(Collection<T> list);
	/**
	 * 通过sql 执行修改和删除
	 * @param sql
	 * lilang 
	 * 2013-6-16下午6:11:23
	 */
	public void updateExcute(String sql);
	/**
	 * 查询
	 * @param params
	 * @return
	 */
	public List<T> findParByList(Map<String,Object> params);
	
	
	/**
	 * 查询
	 * @param params
	 * @return
	 */
	public List<T> findByParams(Map<String,Object> params,Map<String,Object> orders);
	/**
	 * 查询数量
	 * @param params
	 * @return
	 * lilang 
	 * 2013-10-11上午10:31:34
	 */
	public Long findByParamCount(Map<String,Object> params);
	
	/**
	 * 查询
	 * @param params
	 * @return
	 */
	public List<T> findParByList(List<Long> sids);
	
	/**
	 * 查询
	 * @param params
	 * @return
	 */
	public List<T> findParByList(Map<String,Object> params,Map<String,Object> likeMap,Map<String,Object> sortMap);
	
	/**
	 * 查询
	 * @param params
	 * @return
	 */
	public T findUnObject(Map<String,Object> params);
	
	
	public T findByParmkeys(Long sid);
	
	/**
	 * 分页查询
	 * @param filterMap
	 * @param likeMap
	 * @param sortMap
	 * @param pageNo
	 * @param pageSize
	 * @return
	 */
	public Page<T> findByPage(Map<String,Object> filterMap, Map<String,Object> likeMap, Map<String,Object> sortMap, int pageNo, int pageSize);
	
	
	public boolean isUnique(Object entity,String names);
}
